package com.dongzili.common.utils;

import java.util.*;

public class PackagePathProcessor {

    /**
     * 处理包路径列表，只保留包容范围最大的路径
     * @param packagePaths 包路径列表
     * @return 处理后的包路径列表
     */
    public static List<String> processPackagePaths(List<String> packagePaths) {
        if (packagePaths == null || packagePaths.isEmpty()) {
            return Collections.emptyList();
        }
        
        // 复制列表并按字典序排序
        List<String> sortedPaths = new ArrayList<>(packagePaths);
        sortedPaths.sort(Comparator.naturalOrder());
        
        List<String> result = new ArrayList<>();
        String currentParent = null;
        
        for (String path : sortedPaths) {
            // 如果当前路径是当前父路径的子路径，则跳过
            if (currentParent != null && isSubPath(path, currentParent)) {
                continue;
            }
            
            // 检查当前路径是否可以成为新的父路径
            if (currentParent == null || !isSubPath(currentParent, path)) {
                currentParent = path;
                result.add(path);
            }
        }
        
        return result;
    }
    
    /**
     * 判断child是否是parent的子路径
     */
    private static boolean isSubPath(String child, String parent) {
        if (parent.equals(child)) {
            return true;
        }
        // 确保parent以点结尾，避免错误匹配
        if (!parent.endsWith(".")) {
            parent += ".";
        }
        return child.startsWith(parent);
    }


    /**
     * 获取指定类所在包的父包名
     * @param entityClass
     * @return
     */
    public static String getParentPackageName(Class<?> entityClass) {
        String packageName = entityClass.getPackageName();
        int lastDotIndex = packageName.lastIndexOf('.');

        // 如果当前包名中存在上一级包
        if (lastDotIndex != -1) {
            return packageName.substring(0, lastDotIndex);
        } else {
            // 如果没有上一级包，说明当前包名已经是根包
            return null; // 或者返回""，取决于你的需求
        }
    }
}